//
//  SQLiteManager.swift
//  1222-FMDB框架
//
//  Created by 王先强 on 15/12/22.
//  Copyright © 2015年 王先强. All rights reserved.
//

import Foundation

private let dbName = "status.db"

class SQLiteManager {
    
    static let sharedManager = SQLiteManager()
    
    let queue: FMDatabaseQueue
    //init 方法要对类中所有非可选数据进行初始化
    private init() {
        
        var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        path = (path as NSString).stringByAppendingPathComponent(dbName)
        
//        print("数据库路径 " + path)
        
        //1. 打开数据库队列
        // 如果数据库不存在,会创建数据库,再创建对列,打开数据库
        // 如果数据库存在,创建队列,打开数据库
        queue = FMDatabaseQueue(path: path)
        //创建数据库
        createTable()
    }
    
    
    
    func execRecordSet(sqlString: String) -> [[String: AnyObject]]? {
        
        
        //创建可变字典数组对遍历的数据库字段进行存储
        var resultArr = [[String: AnyObject]]()
        SQLiteManager.sharedManager.queue.inDatabase { (db) -> Void in
            guard let resultSet = db.executeQuery(sqlString) else {
                print("没有查询到数据")
                return
            }
            while resultSet.next() {
                // 获取结果集合的大小
                let count = resultSet.columnCount()
                //创建可变字典，对集合对字段进行便利，将集合转换为字典
                var dict = [String: AnyObject]()
                for col in 0..<count {
                    //获取字段
                    let key = resultSet.columnNameForIndex(col)
                    //获取字段对应的内容
                    let object = resultSet.objectForColumnIndex(col)
                    //转换为字典
                    dict[key] = object
                }
                resultArr.append(dict)
            }
//            print(resultArr)
        }
        
        return resultArr
    }
    
    private func createTable() {
        //准备数据库执行代码
        let path = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)
        let sql = try! String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
        queue.inDatabase { (db) -> Void in
            
            //创建表时候最好选择 executeStatements
            //可以执行多个sql语句
            //保证一次性创建所需的多个数据表文件
            if db.executeStatements(sql) {
                
                let sandBox = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
                print(sandBox)
                
                print("创建表成功")
            }else{
                print("创建表失败")
            }
        }
        
    }
}